# _*_ coding: utf-8 _*_
"""
@ 时间    ：2024/10/25 13:18
@ 作者    ：旺财
@ 文件    ：04 异常值处理.py
@ 说明    ：   
"""
import pandas as pd
import matplotlib.pyplot as plt

data = {
    'A': [3, 10, 5, 7, 1, 9, 69],
    'B': [15, 16, 14, 100, 19, 11, 8],
    'C': [20, 15, 18, 21, 120, 27, 29]
}
df = pd.DataFrame(data)
print(df)

# 1. 利用标准差检测
# 原理:数据如果服从正太分布,99%的数据与均值的距离在3个标准差之内,95%的数据与均值的距离应该在2个标准差之内,3个标准差过于严格,一般用2个
df_new = pd.DataFrame()
for i in df.columns:
    z = (df[i] - df[i].mean()) / df[i].std()
    df_new[i] = abs(z) > 2
print(df_new)

# 2. 利用箱体图观察异常值
df.boxplot()
plt.show()